/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Hoja4;

import java.util.LinkedList;
//import java.util.List;
/**
 *
 * @author Josue Cabrera 10018
 */
public class Stack<j> extends AbstStack<j>{

    /**
     * Los atributos de esta clase son solamente 3. Utiliza un integer para indice.
     * Una lista para el Stack y un String para mensajes necesarios.
     * @param args the command line arguments
     */
     private int top;
     private LinkedList<j> storage;
     private String msj;
     
   Stack() {
        // Este metodo es el constructor. Solamente inicializa el ArrayList y el indice.
        storage = new LinkedList<j>();
        top = -1;
        msj = "";
    }
   /**
     * @Return regresa el mensaje dependiendo del error que ocurra.
     */
   public String getMsj(){
       return msj;
   }

      /**
     * 
     * 
     * @Return regresa un objeto generico que se encuentra en la ultima posicion del Stack.
    * No lo elimina del Stack.
     */
    @Override
    public j peek(){
        j dat = null;
        if (top == -1)
            msj = "El Stack esta vacio";
        else 
            dat = storage.getFirst();
        return dat;
    }

       /**
     * 
     * 
     * @Return regresa objeto que se encuentra en la ultima posicion del Stack.
     * Este metodo elimina del Stack el objeto que retorna.
     */
    @Override
    public j pop(){
        j dat = null;
        if (top == -1)
                  msj ="El Stack esta vacio";
        else{
            dat = storage.remove();
            top--;
            }
        return dat;
        
    }

       /**
     * 
     * 
     * @Return regresa un booleano que indica si el Stack esta vacio o no.
     */
    @Override
    public boolean isEmpty() {
        return (top == -1);
    }

       /**
     * 
     * 
     * @Return Este metodo no retorna ningun valor. Solamente agrega un objeto
     * al Stack.
     * **/
    
    @Override
    public void push(j value) {
         top++;
         storage.addFirst(value);
    }



}